import type { AsyncComponentLoader } from 'vue'

// 模块的 接口

type idType = number | string

/**
 * 后端的模块
 */
export interface IModule {
  id: idType,
  moduleName: string, // 模块名称
  parentId: idType, // 上级模块ID
  level: number, // 层级
  path: string, // 父ID集合，“,”号分割
  sort: number, // 同一个父级里的先后顺序
  sortAll: number, // 模块全排列
  title: string, // 模块名称
  naviId?: idType, // 导航ID
  urlPath: string, // url 里的路径
  icon: string // 图标，组件类型
}

/**
 * 前端的模块
 */
export interface IModuleTree {
  menuId: idType, // 模块ID，
  title: string, // 模块名称
  naviId?: idType, // 导航ID
  path: string, // url 里的路径
  icon: any, // 图标，组件类型
  component?: AsyncComponentLoader,
  children?: IModuleTree[] // 子模块
}

/**
 * 状态
 */
export interface IModuleState {
  moduleTree: IModuleTree[], // 模块，绑定 tree
  moduleList: IModule[], // 后端需要的结构
  moduleObject: { // 对象的形式保存
    [id: idType]: IModule
  },
  currentModule: {
    id: idType, // 当前选择的模块ID
    num: 1, // 添加用的序号
    sortAll: 1, // 类型转换时用的排序
    info: IModuleTree // 当前选择的模块信息
  },
  listToTree?: () => void,
  treeToList?: () => void
}